package org.spiderdesign.selenium.driver;

import org.apache.commons.lang3.StringUtils;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.spiderdesign.model.SpiderNode;
import org.springframework.stereotype.Component;

@Component
public class HtmlUnitDriverProvider implements DriverProvider {
    @Override
    public String support() {
        return "htmlunit";
    }

    @Override
    public WebDriver getWebDriver(SpiderNode node, String proxyStr) {
        // 1. 初始化能力配置
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "htmlunit");
        capabilities.setCapability(CapabilityType.PLATFORM_NAME, org.openqa.selenium.Platform.ANY);

        // 2. 配置代理（如有）
        if (StringUtils.isNotBlank(proxyStr)) {
            Proxy proxy = new Proxy();
            proxy.setHttpProxy(proxyStr);
            proxy.setSslProxy(proxyStr); // 同时支持 HTTP 和 HTTPS 代理
            capabilities.setCapability(CapabilityType.PROXY, proxy);
        }

        // 3. 实例化 HtmlUnitDriver 时直接传入能力配置（替代 setCapabilities 方法）
        HtmlUnitDriver driver = new HtmlUnitDriver(capabilities);

        // 4. 配置 JavaScript 启用状态（使用 Driver 自身方法）
        boolean javascriptEnabled = !"1".equals(node.getStringJsonValue(JAVASCRIPT_DISABLED));
        driver.setJavascriptEnabled(javascriptEnabled);

        // 可选：设置模拟的浏览器版本（如 Chrome、Firefox）
        // driver.setBrowserVersion("chrome");

        return driver;
    }
}
